iT邦幫忙

2023 iThome 鐵人賽

DAY 10
1
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 10

10. 用玩學機來算數學

  • 分享至 

  • xImage
  •  

內建數學函數簡介

玩學機中內建了一個叫做 math 的模組,裡面有一些常用的數學函數與常數可以使用。您可以使用 import math; help(math) 指令來列出所有的函數與常數。常用的有:

  1. math.pi 3.141593
  2. math.e 2.718282
  3. math.sqrt(x) 傳回 x 的平方根
  4. math.exp(x) 傳回e 的 x 次方
  5. math.log(x[, base]) 傳回 x 的自然對數,base 為底數,可自行選擇修改
  6. math.sin(x) 傳回 x 的正弦值
  7. math.degrees(x) 將 x 從弧度轉換為角度
  8. math.radians(x) 將 x 從角度轉換為弧度
  9. math.ceil(x) 傳回大於或等於x 的最小整數
  10. math.floor(x) 傳回小於或等於x 的最大整數
  11. math.fabs(x) 傳回浮點數形式表示的絕對值
  12. math.modf(x) 傳回數值的整數與小數部分
  13. math. factorial(x) 傳回 x 的階乘數

目前有的第三方數學函式庫

  1. micropython-ulab 是一個數值計算函式庫,用來處理線性代數、信號處理等運算任務。特色是還提供了 NumPy 樣式的 API,可以讓嵌入式系統進行科學計算。有提供矩陣操作、傅立葉轉換、信號濾波等功能。但要使用這個函式庫,需要跟 MicroPyhon 一起編譯韌體,產生 .uf2 檔。可用於 SMD51、STM32、ESP32等嵌入式設備。
  2. micropython-fractions 處理有理數(分數)的函式庫,可精確表示有理數,避免浮點數精確度問題。
  3. MicroPython_Statistics 移植 Python 3 的統計模組,讓 mean()、median()、mod()、stdev() 等函數與 Python 3 語法一致。
  4. micropython-mtx 矩陣快速相乘與速解線性方程組。
  5. umatrix 一個可直接匯入 py 檔使用的矩陣運算函式庫。

運算範例

小學程度: 四則運算出題機

count=0
right=0
op = ['+','-','*','/']

while True:
   a = wb.rand(0,99)
   b = wb.rand(0,99)
   o = op[wb.rand(0, 4)]
   print('%d %s %d = '%(a,o,b))
   question = input('請輸入您的答案:(按q鍵退出)')
   if o == '+':
       result = a + b
   elif o == '-':
       result = a - b
   elif o == '*':
       result = a * b
   elif o == '/':
       result = a / b
   if question == str(result):
       print('正確答案')
       right += 1
       count += 1
   elif question == 'q':
       break
   else:
       print('答錯了!')
       count += 1

percent = right / count
print('測驗完成,您回答了 %d 題,正確題數有 %d,正確率有 %.2f%%' %(count, right, percent * 100))

國中程度: 解一元二次方程式

import math 

def equationroots(a, b, c):
    delta = b * b - 4 * a * c 
    root = math.sqrt(abs(delta)) 
    if delta > 0:
        print("有相異實根: ")
        print((-b + root)/(2*a))
        print((-b - root)/(2*a))
    elif delta == 0:
        print("有相等實根: ")
        print(-b / (2 * a))
    else:
        print("無實數解")

equationroots(1, 2, 1)
equationroots(5, 8, 3)
equationroots(1, 3, 3)

高中程度: 使用牛頓法逼近 √11

import math
python_result = math.sqrt(11)
print("用 Math.sqrt(11) 計算出來的值為:", python_result)

def f(x):
    return x * x - 11

def df(x):
    return 2*x

def newton(a):
    for i in range(1, 7):
        a = a - f(a) / df(a)
    return a

print("利用牛頓法求的值為: ", newton(3))
print("誤差值為 ", abs(newton(3) - python_result))

大學程度: 矩陣運算

為了要讓玩學機有基本的矩陣運算功能,您可以考慮使用 umatrix 這個第三方模組。雖然 micropython-ulab 功能更強大,但需要額外編譯才能燒錄進玩學機裡。因此,我們在這裡使用 umatrix。從github 網站下載 umatrix.py ,並將檔案上傳到玩學機的根目錄裡,您就可以讓玩學機進行矩陣運算了。

from umatrix import *
A = matrix([1, 2, 3], [4, 5, 6], [7, 8, 9])
M = matrix([12, 23, 31], [40, 50, 60], [71, 87, 98])
print("===========================")
print(A)
print("===========================")
print(M)
print("===========================")
print(N)
print("===========================")
print(" A ^ 2 是 ")
print(A**2)
print("===========================")
print("det(M) = ")
print(M.det)
print("===========================")
print("M 的 Inverse 矩陣為")
print(M.inverse)
print("===========================")
print("M 的 Transpose 矩陣為")
print(M.transpose)

看了這麼多數學範例,是不是有點頭昏眼花呢?好好睡一下,明天我們開始來玩一些硬體套件,要教您如何「讓 LED 燈環顯示」。


上一篇
09. Micropython 內建函數與模組簡介
下一篇
11. 讓 LED 燈環顯示
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言